x86: fix getvcpucontext for HVM segment registers
authorKeir Fraser <keir.fraser@citrix.com>
Tue, 11 Nov 2008 11:13:57 +0000 (11:13 +0000)
committerKeir Fraser <keir.fraser@citrix.com>
Tue, 11 Nov 2008 11:13:57 +0000 (11:13 +0000)
Signed-off-by: Kouya Shimura <kouya@jp.fujitsu.com>
Signed-off-by: Akio Takebe <takebe_akio@jp.fujitsu.com>
Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
xen/arch/x86/domctl.c

index a145583137fd43f21e3abf1b785e4eff24b37b92..7531cfddffb8291ae4a8240cb7d738e5c50710b3 100644 (file)
@@ -1074,11 +1074,24 @@ void arch_get_info_guest(struct vcpu *v, vcpu_guest_context_u c)
 
     if ( is_hvm_vcpu(v) )
     {
+        struct segment_register sreg;
         memset(c.nat->ctrlreg, 0, sizeof(c.nat->ctrlreg));
         c.nat->ctrlreg[0] = v->arch.hvm_vcpu.guest_cr[0];
         c.nat->ctrlreg[2] = v->arch.hvm_vcpu.guest_cr[2];
         c.nat->ctrlreg[3] = v->arch.hvm_vcpu.guest_cr[3];
         c.nat->ctrlreg[4] = v->arch.hvm_vcpu.guest_cr[4];
+        hvm_get_segment_register(v, x86_seg_cs, &sreg);
+        c.nat->user_regs.cs = sreg.sel;
+        hvm_get_segment_register(v, x86_seg_ss, &sreg);
+        c.nat->user_regs.ss = sreg.sel;
+        hvm_get_segment_register(v, x86_seg_ds, &sreg);
+        c.nat->user_regs.ds = sreg.sel;
+        hvm_get_segment_register(v, x86_seg_es, &sreg);
+        c.nat->user_regs.es = sreg.sel;
+        hvm_get_segment_register(v, x86_seg_fs, &sreg);
+        c.nat->user_regs.fs = sreg.sel;
+        hvm_get_segment_register(v, x86_seg_gs, &sreg);
+        c.nat->user_regs.gs = sreg.sel;
     }
     else
     {